// https://blog.csdn.net/baidu_24563939/article/details/80519413
// https://www.cnblogs.com/CCxi/p/9448194.html

// string.charAt(position)
// charAt方法返回在string中pos位置的字符。
// 如果pos小于0或者大于等于字符串的长度string.length，它会返回空字符串。
// javascript没有字符类型（character type）。这个方法返回的结果是一个字符串：
var name = 'Curly';
var initial = name.charAt(0); // initial='C';

// string.charCodeAt(position)
//  charCodeAt方法同charAt一样，只不过它返回的不是一个字符串，
// 而是以整数形式表示的在string中的pos位置处的字符的字符码位。
// 如果pos小于0或大于等于字符串的长度string.length，它返回NaN。
var name = 'Curly';
var initial = name.charCodeAt(0); //initial = 67;

// string.concat(string...)
// concat方法把其他的字符串连接在一起来构造一个新的字符串。它很少被使用，因为用+运算符更为方便：
var s = 'C'.concat('a', 't'); //s = 'Cat';

// string.indexOf(searchString, position)
// indexOf方法在string内查找一个字符串searchString。
// 如果它被找到，返回第1个匹配字符的位置，否则返回-1。
// 可选参数position可设置从string的某个指定的位置开始查找：
var text = 'Mississippi';
var p = text.indexOf('ss'); //p = 2;
p = text.indexOf('ss', 3); //p = 5;
p = text.indexOf('ss', 6); //p = -1;

// string.lastIndexOf(searchString, position)
// lastIndexOf方法和indexOf方法类似，只不过它是从该字符串的末尾开始查找而不是从开头：
var text = 'Mississippi';
var p = text.lastIndexOf('ss'); //p = 5;
p = text.lastIndexOf('ss', 3); //p = 2;
p = text.lastIndexOf('ss', 6); //p = 5;

// string.localCompare(that)
// localCompare方法比较两个字符串。
// 如何比较字符串的规则没有详细说明。
// 如果string比字符串that小，那么结果为负数。
// 如果它们是相等的，那么结果为0。
// 这类似于array.sort比较函数的约定：
var m = ['AAA', 'A', 'aa', 'a', 'Aa', 'aaa'];
m.sort(function(a, b) {
  return a.localeCompare(b);
});
//m = ['a', 'A', 'aa', 'Aa', 'aaa', 'AAA'];(某些local设置下)

// string.match(regexp)
// match方法让字符串和一个正则表达式进行匹配。
// 它依据g标识来决定如何进行匹配。
// 如果没有g标识，那么调用string.match(regexp)的结果与调用regexp.exec(string)的结果相同。
// 然而，如果regexp带有g标识，那么它生成一个包含所有匹配（除捕获分组之外）的数组：
var text = '<html><body bgcolor=linen><p>' + 'This is <b>bold</b>!</p></body></html>';
var tags = /[^<>]+|<(\/?)([A-Za-z]+)([^<>]*)>/g;
var a, i;
a = text.match(tags);
for (i = 0; i < a.length; i += 1) {
  console.log(a[i]);
}

//结果：
//<html>
//<body bgcolor=linen>
//<p>
//This is
//<b>
//bold
//</b>
//!
//</p>
//</body>
//</html>

// string.replace(searchValue, replaceValue)
// replace方法对string进行查找的替换操作，并返回一个新的字符串。
// 参数searchValue可以是一个字符串或一个正则表达式对象。
// 如果它是一个字符串，那么searchValue只会在第1次出现的地方被替换，所以下面的代码结果是"mother-in_law"：
var result = 'mother_in_law'.replace('_', '-');
//捕获括号中的3个数字
var oldareacode = /\((\d{3})\)/g;
var p = '(555)666-1212'.replace(oldareacode, '$1-');
//p = '555-666-1212';
//  美元符号序列	 替换对象
//  $$	          $
//  $&	          整个匹配的文本
//  $number	      分组捕获的文本
//  $`	          匹配之前的文本
//  $'	          匹配之后的文本

// string.search(regexp)
// search方法和indexOf方法类似，只是它接受一个正则表达式对象作为参数而不是一个字符串。
// 如果找到匹配，它返回第1个匹配的首字符位置，如果没有找到匹配，则返回-1。
// 此方法会忽略g标识，且没有position参数：
var text = 'and in it he says "Any damn fool could';
var pos = text.search(/["']/);
//pos = 18;

// string.slice(start ,end)
// slice方法复制string的一部分来构造一个新的字符串。
// 如果start参数是负数，它将与string.length相加。
// end参数是可选的，且默认值是string.length。
// 如果end参数是负数，那么它将与string.length相加。
// end参数等于你要取的最后一个字符的位置值加上1 。
// 要想得到从位置p开始的n个字符，就用string.slice(p ,p + n)。
var text = 'and in it he says "Any damn fool could';
var a = text.slice(18);
//a = '"Any damn fool could';
var b = text.slice(0, 3);
//b = 'and';
var c = text.slice(-5);
//c = 'could';
var d = text.slice(19, 32);
//d = 'Any damn fool';

// string.split(separator, limit)
// split方法把这个string分割成片段来创建一个字符串数组。
// 可选参数limit可以限制被分割的片段数量。separator参数可以是一个字符串或一个正则表达式。
// 如果separator是一个空字符，它会返回一个单字符的数组：
var digits = '0123456789';
var a = digits.split('', 5);
//a = ['0', '1', '2', '3', '4'];
// 否则，此方法会在string中查找所有separator出现的地方。
// 分隔符两边的每个单元文本都会被复制到该数组中。此方法会忽略标识：
var ip = '192.168.1.0';
var b = ip.split('.');
//b = ['192', '168', '1', '0'];
var c = 'a|b|c'.split('|');
//c = ['', 'a', 'b', 'c', ''];
var text = 'last, first, middle';
var d = text.split(/\s*,\s*/);
//d = ['last', 'first', 'middle']
// 有一些特例须特别注意。来自分组捕获的文本会被包含在被分割后的数组中：
var text = 'last, first, middle';
var e = text.split(/\s*(,)\s*/);
//e = ['last', ',', 'first', ',', 'middle']
// 当separator是一个正则表达式时，有一些javascript的实现在输出数组中会排除掉空字符中：
// （只有IE8及之前版本的IE浏览器会在输出的数组结果中排除空字符串，IE9已经修复了这个问题）
var f = '|a|b|c|'.split('|');
//在一些系统中，f = ['', 'a', 'b', 'c', ''];
//在另外一些系统中，f = ['a', 'b', 'c'];

// string.substring(start, end)
// substring的用法和slice方法一样，
// 只不过它不能处理负数参数。没有任何理由去使用substring方法。
// 请用slice替代它。

// string.toLocalLowerCase()
// toLocalLowerCase方法返回一个新的字符串，它使用本地化的规则把这个string中的所有字母转换为小写格式。
// 这个方法主要用在土耳其语上，因为土耳其语中‘I’转换为‘I’，而不是‘i’。

// string.toLocalUpperCase()
// toLocalUpperCase方法返回一个新的字符串，它使用本地化的规则把这个string中的所有字母转换为大写格式。
// 这个方法主要用在土耳其语上，因为土耳其语中‘i’转换为‘İ’，而不是‘I’。

// tring.toLowerCase()
// toUpperCase方法返回一个新的字符串，这个string中的所有字母都被转换为大写格式。

// string.fromCharCode(char...)
// String.fromCharCode函数根据一串数字编码返回一个字符串。
var a = String.fromCharCode(67, 97, 116);
//a = 'Cat';

// trim : 去空格 : 去除字符串中左右的空格；
// trimLeft : 去字符串左边的空格
// trimRight : 去字符串右边的空格；
var str = ' 66yy yww ';
str.trim();

str.trimLeft;
